package com.slidingmenu.lib;
import android.content.Context;
import android.graphics.Canvas;
import android.view.MotionEvent;
import android.view.ViewGroup;
import com.slidingmenu.lib.SlidingMenu.CanvasTransformer;
public class CustomViewBehind extends CustomViewAbove {
private static final String TAG = "CustomViewBehind";
public static final int LEFT = 0;
public static final int RIGHT = 1;
private CustomViewAbove mViewAbove;
private int mMode;
private CanvasTransformer mTransformer;
private boolean mChildrenEnabled;
public CustomViewBehind(Context context, int mode) {
super(context);
if (mode != LEFT && mode != RIGHT)
throw new IllegalStateException("mode must be LEFT or RIGHT");
mMode = mode;
}
public void setCustomViewAbove(CustomViewAbove customViewAbove) {
mViewAbove = customViewAbove;
mViewAbove.setTouchModeBehind(mTouchMode);
}
public void setTouchMode(int i) {
mTouchMode = i;
if (mViewAbove != null)
mViewAbove.setTouchModeBehind(i);
}
public void setCanvasTransformer(CanvasTransformer t) {
mTransformer = t;
}
public int getChildLeft(int i) {
return 0;
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
final int width = r - l;
final int height = b - t;
mContent.layout(0, 0, width, height);
}
@Override
public int getCustomWidth() {
int i = isLeftOpen()? 0 : 1;
return getChildWidth(i);
}
@Override
public int getChildWidth(int i) {
if (i <= 0) {
return getBehindWidth();
} else {
return getChildAt(i).getMeasuredWidth();
}
}
public int getBehindWidth() {
ViewGroup.LayoutParams params = getLayoutParams();
return params.width;
}
public void setChildrenEnabled(boolean enabled) {
mChildrenEnabled = enabled;
}
@Override
public void scrollTo(int x, int y) {
super.scrollTo(x, y);
if (mTransformer != null)
invalidate();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
return !mChildrenEnabled;
}
@Override
public boolean onTouchEvent(MotionEvent e) {
return false;
}
@Override
protected void dispatchDraw(Canvas canvas) {
if (mTransformer != null) {
canvas.save();
float percent = 0.0f;
switch (mMode) {
case LEFT:
percent = mViewAbove.getPercentOpenLeft();
break;
case RIGHT:
percent = mViewAbove.getPercentOpenRight();
break;
}
mTransformer.transformCanvas(canvas, percent);
super.dispatchDraw(canvas);
canvas.restore();
} else
super.dispatchDraw(canvas);
}
}